package com.study.suimai.cart.controller;

import com.study.common.utils.R;
import com.study.suimai.cart.service.CartService;
import com.study.suimai.cart.vo.CartItemVo;
import com.study.suimai.cart.vo.CartVo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.annotation.Resource;
import java.util.concurrent.ExecutionException;


@Controller
public class CartController {

  @Resource
  private CartService cartService;

  /**
   * 删除商品信息
   * @param skuId
   * @return
   */
  @DeleteMapping(value = "/deleteItem")
  public R deleteItem(@RequestParam("skuId") Integer skuId) {
    cartService.deleteIdCartInfo(skuId);
    return R.ok();

  }

  /**
   * 改变商品数量
   * @param skuId
   * @param num
   * @return
   */
  @ResponseBody
  @PostMapping(value = "/countItem")
  public R countItem(@RequestParam(value = "skuId") Long skuId,
                          @RequestParam(value = "num") Integer num) {
    cartService.changeItemCount(skuId,num);
    return R.ok();
  }

  @ResponseBody
  @PostMapping(value = "/checkItem")
  public R checkItem(@RequestParam(value = "skuId") Long skuId,
                     @RequestParam(value = "checked") Integer checked) {
    cartService.checkItem(skuId,checked);
    return R.ok();
  }

  /**
   * 去购物车页面的请求
   * 浏览器有一个cookie:user-key 标识用户的身份，一个月过期
   * 如果第一次使用jd的购物车功能，都会给一个临时的用户身份:
   * 浏览器以后保存，每次访问都会带上这个cookie；
   * <p>
   * 登录：session有
   * 没登录：按照cookie里面带来user-key来做
   * 第一次，如果没有临时用户，自动创建一个临时用户
   *
   * @return
   */
  @GetMapping(value = "/cart.html")
  public String cartListPage(Model model) throws ExecutionException, InterruptedException {
    CartVo cartVo = cartService.getCart();
    model.addAttribute("cart", cartVo);
    return "cartList";
  }

  /**
   * 添加商品到购物车
   * attributes.addFlashAttribute():将数据放在session中，可以在页面中取出，但是只能取一次
   * attributes.addAttribute():将数据放在url后面
   *
   * @return
   */
  @GetMapping(value = "/addCartItem")
  public String addCartItem(@RequestParam("skuId") Long skuId,
                            @RequestParam("num") Integer num,
                            Model model,
                            RedirectAttributes attributes) throws ExecutionException, InterruptedException {

    CartItemVo cartItemVo = cartService.addToCart(skuId, num);

    model.addAttribute("cartItem", cartItemVo);
//    attributes.addAttribute("skuId",skuId);
//    return "redirect:/cart/addToCartSuccessPage.html";
    return "success";
  }
}
